﻿using System;
using System.Collections.Generic;
using Itau.IM.Carimbador.Contract;
using Itau.IM.Carimbador.EntityObject;
using Itau.IM.Carimbador.Facade;
using Microsoft.VisualStudio.TestTools.UnitTesting;


namespace Itau.IM.Carimbador.UnitTest
{
    /// <summary>
    /// Rotina de testes unitários - Transfer Price - Carimbador
    /// </summary>
    [TestClass]
    public class TransferPriceTest
    {
        #region Métodos de Teste
        [TestMethod]
        public void Consultar()
        {
            TransferPriceFacade client = new TransferPriceFacade();

            ConsultarTaxaTransferPriceRequest request = new ConsultarTaxaTransferPriceRequest();

            request.BaseTIR = 252;
            request.BaseTaxaCliente = 252;
            request.CodigoCategoriaPosTaxaCliente = 0000;
            request.CodigoClassificacaocontabil = 0;
            request.CodigoEmpresa = "";
            request.CodigoProdutoFinanceiroDerivado = 12607; 
            request.ComponentePosTaxaCliente = 0;
            request.ComponentePreTaxaCliente = 10;
            request.DataHoraOperacao = new DateTime(2012, 10, 18, 15, 30, 00);
            request.DataReferenciaOperacao = new DateTime(2012, 10, 18);
            request.FlagRecarimbo = 0;
            request.MetodoCalculoTaxa = 1;
            request.NomeUsuario = "HR";

            request.Parametros = new List<ParametroEO>();
            request.Parametros.Add(new ParametroEO(){ Nome = "1", Valor = "0000" });
            request.Parametros.Add(new ParametroEO(){ Nome = "2", Valor = "0790" });
            request.Parametros.Add(new ParametroEO(){ Nome = "3", Valor = "2" });
            request.Parametros.Add(new ParametroEO(){ Nome = "4", Valor = "0" });
            request.Parametros.Add(new ParametroEO(){ Nome = "5", Valor = "00" });
            request.Parametros.Add(new ParametroEO(){ Nome = "6", Valor = "0" });
            request.Parametros.Add(new ParametroEO(){ Nome = "7", Valor = "0" });
            request.Parametros.Add(new ParametroEO(){ Nome = "8", Valor = "0" });
            
            request.QuantidadeDatasVencimento = 3;
            request.QuantidadeDiasCarencia = 0;
            request.QuantidadeParamentros = 8;
            request.QuantidadeParcelas = 3;
            request.Segmento = "0";
            request.TipoAmortizacao = 2;
            request.TipoEmpresa = "";
            request.ValorPrincipalBruto = 825000;

            request.Vencimentos = new List<DataVencimentoEO>();
            request.Vencimentos.Add(new DataVencimentoEO() { DataVencimento = "28.11.2012" });
            request.Vencimentos.Add(new DataVencimentoEO() { DataVencimento = "10.12.2012" });
            request.Vencimentos.Add(new DataVencimentoEO() { DataVencimento = "07.01.2013" });

            request.FluxoCaixa = new List<FluxoCaixaEO>();
            request.FluxoCaixa.Add(new FluxoCaixaEO() { Data = new DateTime(2012, 11, 28), Valor = 275000 });
            request.FluxoCaixa.Add(new FluxoCaixaEO() { Data = new DateTime(2012, 12, 10), Valor = 275000 });
            request.FluxoCaixa.Add(new FluxoCaixaEO() { Data = new DateTime(2013, 01, 07), Valor = 275000 });

            ConsultarTaxaTransferPriceResponse response = client.ConsultarTaxaTransferPrice(request);

            Assert.IsTrue(response.QuantidadeParcelas > 0);
        }
        //[TestMethod]
        //[Description("Consultar Irregular - Book Antigo")]
        //public void ConsultarIrregular()
        //{
        //    TransferPriceFacade client = new TransferPriceFacade();

        //    ConsultarIrregularRequest request = new ConsultarIrregularRequest();

        //    DateTime dataOperacao = DateTime.Now;
        //    for (int i = 0; i < 5; i++)
        //    {
        //        dataOperacao = dataOperacao.AddDays(-1);
        //        if (dataOperacao.DayOfWeek != DayOfWeek.Saturday && dataOperacao.DayOfWeek != DayOfWeek.Sunday)
        //            break;
        //    }


        //    request.FlagRecarimbo = 0;
        //    request.CodigoProdutoFinanceiroDerivado = 99999999;
        //    request.DataHoraOperacao = dataOperacao;
        //    request.NomeUsuario = "TESTE";
        //    request.BaseConversao = EnumBaseConversao.DiasCorridos360;
        //    request.BaseTIR = 360;
        //    request.BaseTaxaOperacao = 360;
        //    request.TaxaOperacao = 0.1231;
        //    request.CodigoTipoAmortizacao = 7;
        //    request.DataReferencia = dataOperacao;
        //    request.ValorPrincipalBruto = 3750000d;

        //    request.Parametros = new List<ParametroEO>();

        //    request.Parametros.Add(new ParametroEO() { Nome = "1", Valor = "0000" });
        //    request.Parametros.Add(new ParametroEO() { Nome = "2", Valor = "0790" });
        //    request.Parametros.Add(new ParametroEO() { Nome = "3", Valor = "0" });
        //    request.Parametros.Add(new ParametroEO() { Nome = "4", Valor = "0" });
        //    request.Parametros.Add(new ParametroEO() { Nome = "6", Valor = "0" });
        //    request.Parametros.Add(new ParametroEO() { Nome = "7", Valor = "0" });
        //    request.Parametros.Add(new ParametroEO() { Nome = "8", Valor = "0" });

        //    request.FluxoCaixa = new List<FluxoCaixaEO>();
        //    request.FluxoCaixa.Add(new FluxoCaixaEO() { Data = dataOperacao.AddMonths(1), Valor = 187500d });
        //    request.FluxoCaixa.Add(new FluxoCaixaEO() { Data = dataOperacao.AddMonths(2), Valor = 187500d });

        //    ConsultarIrregularResponse response = client.ConsultarIrregular(request);
        //    //string Chamada = Itau.IM.Common.Mainframe.Book.BookSerializer.Serialize(request);

        //    Assert.IsTrue(response.ValorTIR > 0);
        //}

        //[TestMethod]
        //[Description("Consultar Regular Com Prazo = Book Antigo")]
        //public void ConsultarRegularComPrazo()
        //{
        //    TransferPriceFacade client = new TransferPriceFacade();

        //    ConsultarRegularComPrazoRequest request = new ConsultarRegularComPrazoRequest();

        //    DateTime dataOperacao = DateTime.Now;
        //    for (int i = 0; i < 5; i++)
        //    {
        //        dataOperacao = dataOperacao.AddDays(-1);
        //        if (dataOperacao.DayOfWeek != DayOfWeek.Saturday && dataOperacao.DayOfWeek != DayOfWeek.Sunday)
        //            break;
        //    }

        //    request.FlagRecarimbo = 1;
        //    request.CodigoProdutoFinanceiroDerivado = 99999999;
        //    request.DataHoraOperacao = dataOperacao;
        //    request.PrazoVencimento = dataOperacao.AddMonths(6) ;
        //    request.NomeUsuario = "TESTE";
        //    request.BaseConversao = EnumBaseConversao.DiasCorridos360;

        //    request.Parametros = new List<ParametroEO>();

        //    request.Parametros.Add(new ParametroEO() { Nome = "1", Valor = "0000" });
        //    request.Parametros.Add(new ParametroEO() { Nome = "2", Valor = "0790" });
        //    request.Parametros.Add(new ParametroEO() { Nome = "3", Valor = "0" });
        //    request.Parametros.Add(new ParametroEO() { Nome = "4", Valor = "0" });
        //    request.Parametros.Add(new ParametroEO() { Nome = "6", Valor = "0" });
        //    request.Parametros.Add(new ParametroEO() { Nome = "7", Valor = "0" });
        //    request.Parametros.Add(new ParametroEO() { Nome = "8", Valor = "0" });

        //    ConsultarRegularComPrazoResponse response = client.ConsultarRegularComPrazo(request);

        //    Assert.IsTrue(response.ValorTransferPrice > 0);
        //}


        //[TestMethod]
        //[Description("Consultar Regular Sem Prazo Rechamada")]
        //public void ConsultarRegularSemPrazoRechamada()
        //{
        //    TransferPriceFacade client = new TransferPriceFacade();
        //    ConsultarRegularSemPrazoRequest request = new ConsultarRegularSemPrazoRequest();
        //    ConsultarRegularSemPrazoResponse response = null;

        //    DateTime dataOperacao = DateTime.Now;
        //    for (int i = 0; i < 5; i++)
        //    {
        //        dataOperacao = dataOperacao.AddDays(-1);
        //        if (dataOperacao.DayOfWeek != DayOfWeek.Saturday && dataOperacao.DayOfWeek != DayOfWeek.Sunday)
        //            break;
        //    }

        //    request.FlagRecarimbo = 1;
        //    request.CodigoProdutoFinanceiroDerivado = 99999999;
        //    request.DataHoraOperacao = dataOperacao;
        //    request.NomeUsuario = "TESTE";

        //    request.Parametros = new List<ParametroEO>();

        //    request.Parametros.Add(new ParametroEO() { Nome = "1", Valor = "0000" });
        //    request.Parametros.Add(new ParametroEO() { Nome = "2", Valor = "0790" });
        //    request.Parametros.Add(new ParametroEO() { Nome = "3", Valor = "0" });
        //    request.Parametros.Add(new ParametroEO() { Nome = "4", Valor = "0" });
        //    request.Parametros.Add(new ParametroEO() { Nome = "6", Valor = "1" });
        //    request.Parametros.Add(new ParametroEO() { Nome = "7", Valor = "0" });
        //    request.Parametros.Add(new ParametroEO() { Nome = "8", Valor = "0" });

        //    int contador = 1;

        //    DateTime ultimaData = new DateTime();

        //    while (response == null || response.IndicadorFimPrimeiraCurva.Equals('N'))
        //    {
        //        if (response != null)
        //        {
        //            request.AreaRechamada = new ConsultarRechamada();
        //            request.AreaRechamada.CodigoPrimeiraCurva = response.CodigoPrimeiraCurva;
        //            request.AreaRechamada.DataPtoPrimeiraCurva = ultimaData;
        //        }

        //        response = client.ConsultarRegularSemPrazo(request);

        //        if (response.MensagemRetorno.Contains("OK"))
        //        {
        //            foreach (PontoCurvaEO ponto in response.PrimeiraCurva)
        //            {
        //                Console.WriteLine("{0} - {1:dd/MM/yyyy} - {2}", contador++.ToString().PadLeft(3, '0'), ponto.Data, ponto.Valor);

        //                ultimaData = ponto.Data;
        //            }
        //        }
        //        else
        //        {
        //            Console.WriteLine(response.MensagemRetorno);
        //        }
        //    }

        //    Assert.IsTrue(response.PrimeiraCurva.Count > 0);
        //}

        //#region ConsultarRegularSemPrazo
        /////// <summary>
        /////// Método de Teste - Consultar Regular Sem Prazo
        /////// </summary>
        ////[TestMethod]
        ////[Description("Consultar Regular Sem Prazo")]
        ////public void ConsultarRegularSemPrazo()
        ////{
        ////    TransferPriceFacade client = new TransferPriceFacade();

        ////    ConsultarRegularSemPrazoRequest request = new ConsultarRegularSemPrazoRequest();

        ////    DateTime dataOperacao = DateTime.Now;
        ////    for (int i = 0; i < 5; i++)
        ////    {
        ////        dataOperacao = dataOperacao.AddDays(-1);
        ////        if (dataOperacao.DayOfWeek != DayOfWeek.Saturday && dataOperacao.DayOfWeek != DayOfWeek.Sunday)
        ////            break;
        ////    }

        ////    request.FlagRecarimbo = 1;
        ////    request.CodigoProdutoFinanceiroDerivado = 99999999;
        ////    request.DataHoraOperacao = dataOperacao;
        ////    request.NomeUsuario = "TESTE";
        ////    request.BaseConversao = EnumBaseConversao.SemConversao;


        ////    request.Parametros = new List<ParametroEO>();

        ////    request.Parametros.Add(new ParametroEO() { Nome = "1", Valor = "0000" });
        ////    request.Parametros.Add(new ParametroEO() { Nome = "2", Valor = "0790" });
        ////    request.Parametros.Add(new ParametroEO() { Nome = "3", Valor = "0" });
        ////    request.Parametros.Add(new ParametroEO() { Nome = "4", Valor = "0" });
        ////    request.Parametros.Add(new ParametroEO() { Nome = "6", Valor = "D" });
        ////    request.Parametros.Add(new ParametroEO() { Nome = "7", Valor = "0" });
        ////    request.Parametros.Add(new ParametroEO() { Nome = "8", Valor = "0" });

        ////    ConsultarRegularSemPrazoResponse response = client.ConsultarRegularSemPrazo(request);

        ////    Assert.IsTrue(response.PrimeiraCurva.Count > 0);
        ////}
        //#endregion ConsultarRegularSemPrazo

        //#region ConsultarTaxaTrasferPriceRegular
        ///// <summary>
        ///// Método de Teste - Fluxo Regular com prazo
        ///// </summary>
        ///// 
        //[TestMethod]
        //[Description("ConsultarTaxaTrasferPrice - Fluxo com prazo (Regular)")]
        //public void ConsultarTaxaTrasferPriceRegular()
        //{
        //    TransferPriceFacade client = new TransferPriceFacade();

        //    ConsultarTaxaTransferPriceRequest request = new ConsultarTaxaTransferPriceRequest();

        //    DateTime dataOperacao = DateTime.Now;
        //    for (int i = 0; i < 5; i++)
        //    {
        //        dataOperacao = dataOperacao.AddDays(-1);
        //        if (dataOperacao.DayOfWeek != DayOfWeek.Saturday && dataOperacao.DayOfWeek != DayOfWeek.Sunday)
        //            break;
        //    }

        //    request.FlagRecarimbo = 1;
        //    request.CodigoProdutoFinanceiroDerivado = 99999999;
        //    request.DataHoraOperacao = dataOperacao;
        //    request.DataReferenciaOperacao = dataOperacao;
                        
        //    request.QuantidadeParamentros = 8;
        //    request.Parametros = new List<ParametroEO>();
        //    request.Parametros.Add(new ParametroEO() { Nome = "1", Valor = "0000" });
        //    request.Parametros.Add(new ParametroEO() { Nome = "2", Valor = "0790" });
        //    request.Parametros.Add(new ParametroEO() { Nome = "3", Valor = "0" });
        //    request.Parametros.Add(new ParametroEO() { Nome = "4", Valor = "0" });
        //    request.Parametros.Add(new ParametroEO() { Nome = "5", Valor = "0" });
        //    request.Parametros.Add(new ParametroEO() { Nome = "6", Valor = "0" });
        //    request.Parametros.Add(new ParametroEO() { Nome = "7", Valor = "0" });
        //    request.Parametros.Add(new ParametroEO() { Nome = "8", Valor = "0" });


        //    request.NomeUsuario = "Teste";
        //    request.QuantidadeDiasCarencia = 0;
            
        //    request.QuantidadeDatasVencimento = 1;
        //    request.Vencimentos = new List<DataVencimentoEO>();
        //    request.Vencimentos.Add(new DataVencimentoEO(dataOperacao.AddMonths(5).ToString("dd.MM.yyyy")));

        //    request.ComponentePosTaxaCliente = 0;
        //    request.ComponentePreTaxaCliente = 0.10;
        //    request.CodigoCategoriaPosTaxaCliente = 0;
        //    request.BaseTIR = 252;
        //    request.BaseTaxaCliente = 252;
        //    request.TipoAmortizacao = 0;
        //    request.ValorPrincipalBruto = 2000;

        //    request.MetodoCalculoTaxa = 1;
        //    request.CodigoClassificacaocontabil = 0;
        //    request.TipoEmpresa = "";
        //    request.CodigoEmpresa = "";
        //    request.Segmento = "0";
            
        //    request.QuantidadeParcelas = 0;
        //    request.FluxoCaixa = new List<FluxoCaixaEO>();

        //    ConsultarTaxaTransferPriceResponse response = client.ConsultarTaxaTransferPrice(request);
 
        //    Assert.IsTrue(response.TaxasPrimeiraCurva.Count > 0);
        //}
        //#endregion ConsultarTaxaTrasferPriceRegular

        //#region ConsultarTaxaTrasferPriceIrregular
        ///// <summary>
        ///// Teste Fluxo irregular local
        ///// </summary>
        //[TestMethod]
        //[Description("ConsultarTaxaTrasferPrice - Fluxo Irregular - LOCAL")]
        //public void ConsultarTaxaTrasferPriceIrregular()
        //{
        //    TransferPriceFacade client = new TransferPriceFacade();

        //    ConsultarTaxaTransferPriceRequest request = new ConsultarTaxaTransferPriceRequest();

        //    //request.FlagRecarimbo = 0;
        //    //request.CodigoProdutoFinanceiroDerivado = 099999999;
        //    //request.DataHoraOperacao = new DateTime(2012, 05, 11, 00, 00, 00);
        //    //request.DataReferenciaOperacao = new DateTime(2012, 05, 11);

        //    //request.QuantidadeParamentros = 8;
        //    //request.Parametros = new List<ParametroEO>();
        //    //request.Parametros.Add(new ParametroEO() { Nome = "1", Valor = "0000" });
        //    //request.Parametros.Add(new ParametroEO() { Nome = "2", Valor = "0790" });
        //    //request.Parametros.Add(new ParametroEO() { Nome = "3", Valor = "0" });
        //    //request.Parametros.Add(new ParametroEO() { Nome = "4", Valor = "0" });
        //    //request.Parametros.Add(new ParametroEO() { Nome = "5", Valor = "00" });
        //    //request.Parametros.Add(new ParametroEO() { Nome = "6", Valor = "1" });
        //    //request.Parametros.Add(new ParametroEO() { Nome = "7", Valor = "0" });
        //    //request.Parametros.Add(new ParametroEO() { Nome = "8", Valor = "0" });


        //    //request.NomeUsuario = "Matheus";
        //    //request.QuantidadeDiasCarencia = 0;

        //    //request.QuantidadeDatasVencimento = 1;
        //    //request.Vencimentos = new List<DataVencimentoEO>();
        //    //request.Vencimentos.Add(new DataVencimentoEO("09.12.2012"));

        //    //request.ComponentePosTaxaCliente = 0;
        //    //request.ComponentePreTaxaCliente = 0.1d;
        //    //request.CodigoCategoriaPosTaxaCliente = 1;
        //    //request.BaseTIR = 252;
        //    //request.BaseTaxaCliente = 252;
        //    //request.TipoAmortizacao = 3;
        //    //request.ValorPrincipalBruto = 3750;

        //    //request.QuantidadeParcelas = 10;
        //    //request.FluxoCaixa = new List<FluxoCaixaEO>();
        //    //request.FluxoCaixa.Add(new FluxoCaixaEO() { Data = new DateTime(2012, 03, 09), Valor = 0d });
        //    //request.FluxoCaixa.Add(new FluxoCaixaEO() { Data = new DateTime(2012, 04, 09), Valor = 0d });
        //    //request.FluxoCaixa.Add(new FluxoCaixaEO() { Data = new DateTime(2012, 05, 09), Valor = 0d });
        //    //request.FluxoCaixa.Add(new FluxoCaixaEO() { Data = new DateTime(2012, 06, 09), Valor = 0d });
        //    //request.FluxoCaixa.Add(new FluxoCaixaEO() { Data = new DateTime(2012, 07, 09), Valor = 0d });
        //    //request.FluxoCaixa.Add(new FluxoCaixaEO() { Data = new DateTime(2012, 08, 09), Valor = 0d });
        //    //request.FluxoCaixa.Add(new FluxoCaixaEO() { Data = new DateTime(2012, 09, 09), Valor = 0d });
        //    //request.FluxoCaixa.Add(new FluxoCaixaEO() { Data = new DateTime(2012, 10, 09), Valor = 0d });
        //    //request.FluxoCaixa.Add(new FluxoCaixaEO() { Data = new DateTime(2012, 11, 09), Valor = 0d });
        //    //request.FluxoCaixa.Add(new FluxoCaixaEO() { Data = new DateTime(2012, 12, 09), Valor = 100000000d });

        //    //request.MetodoCalculoTaxa = 1;
        //    //request.CodigoClassificacaocontabil = 0;
        //    //request.TipoEmpresa = "";
        //    //request.CodigoEmpresa = "";
        //    //request.Segmento = "1";


        //    DateTime dataOperacao = DateTime.Now;
        //    for (int i = 0; i < 5; i++)
        //    {
        //        dataOperacao = dataOperacao.AddDays(-1);
        //        if (dataOperacao.DayOfWeek != DayOfWeek.Saturday && dataOperacao.DayOfWeek != DayOfWeek.Sunday)
        //            break;
        //    }

        //    request.FlagRecarimbo = 0; //0=quando não for recarimbo, 1=quando for recarimbo
        //    request.CodigoProdutoFinanceiroDerivado = 099999999; //ver com o Watanabe qual é o codigo que devemos considerar
        //    request.DataHoraOperacao = dataOperacao;
        //    request.DataReferenciaOperacao = dataOperacao;


        //    request.QuantidadeParamentros = 8;
        //    request.Parametros = new List<ParametroEO>();

        //    request.Parametros.Add(new ParametroEO() { Nome = "1", Valor = "0000" });//0000=PRE; 0220=DOLAR; %CDI=1211 ...
        //    request.Parametros.Add(new ParametroEO() { Nome = "2", Valor = "0790" });///0790=REAL; 0220=DOLAR
        //    request.Parametros.Add(new ParametroEO() { Nome = "3", Valor = "0" });//0=BULLET; 1=PMT
        //    request.Parametros.Add(new ParametroEO() { Nome = "4", Valor = "0" });//0=ATIVO; 1=PASSIVO
        //    request.Parametros.Add(new ParametroEO() { Nome = "5", Valor = "00" });//00=NAO IDENTIFICADO; 01-CORP/IBBA; ..., 08=EMPRESAS DOIS ...
        //    request.Parametros.Add(new ParametroEO() { Nome = "6", Valor = "0" });//0=NAO SEGMENTADO; 1=ITAU BBA; 2=EMPRESAS DOIS ...
        //    request.Parametros.Add(new ParametroEO() { Nome = "7", Valor = "0" });//0=SEM LIQUIDEZ; 1=COM LIQUIDEZ
        //    request.Parametros.Add(new ParametroEO() { Nome = "8", Valor = "0" });//0=EM SER; 1=EM ATRASO

        //    request.NomeUsuario = "HR";
        //    request.QuantidadeDiasCarencia = 0;

        //    request.QuantidadeDatasVencimento = 1;
        //    request.Vencimentos = new List<DataVencimentoEO>();
        //    request.Vencimentos.Add(new DataVencimentoEO(dataOperacao.AddMonths(4).ToString("dd.MM.yyyy")));

        //    request.ComponentePosTaxaCliente = 100; //Estes campos servem para informar o valor da parte pré e da parte pós, caso a operações possua essas características. Ax+B
        //    request.ComponentePreTaxaCliente = 0.12; //Estes campos servem para informar o valor da parte pré e da parte pós, caso a operações possua essas características. Ax+B
        //    request.CodigoCategoriaPosTaxaCliente = 1211; //Informar o código Mercado do Pós da taxa cliente utilizada na operação. È a literal X da formula    A X + B

        //    request.BaseTIR = 252;
        //    //DiasCorridos30 = 30,
        //    //DiasCorridos360 = 360,
        //    //DiasUteis252 = 252

        //    request.BaseTaxaCliente = 252;
        //    //DiasCorridos30 = 30,
        //    //DiasCorridos360 = 360,
        //    //DiasUteis252 = 252

        //    request.TipoAmortizacao = 1;
        //    //////TipoAmortizacao:   Preenchido somente quando tipo de fluxo = 2 e indexador = PRE
        //    ////// 1: Princ. + enc. Iguais, encargos sobre saldo devedor
        //    ////// 2: Princ. + encargos iguais, encargos sobre parcela
        //    ////// 3: Principal no final e encargos mensais
        //    ////// 4: Principais iguais e encargos sobre saldo devedor
        //    ////// 5: Principais iguais e encargos sobre parcela
        //    ////// 6: Principais diferentes encargos sobre saldo devedor
        //    ////// 7: principais diferentes e encargos sobre parcela

        //    request.ValorPrincipalBruto = 400d;

        //    request.QuantidadeParcelas = 4;
        //    request.FluxoCaixa = new List<FluxoCaixaEO>();
        //    request.FluxoCaixa.Add(new FluxoCaixaEO() { Data = dataOperacao.AddMonths(1), Valor = 100d });
        //    request.FluxoCaixa.Add(new FluxoCaixaEO() { Data = dataOperacao.AddMonths(2), Valor = 100d });
        //    request.FluxoCaixa.Add(new FluxoCaixaEO() { Data = dataOperacao.AddMonths(3), Valor = 100d });
        //    request.FluxoCaixa.Add(new FluxoCaixaEO() { Data = dataOperacao.AddMonths(4), Valor = 100d });


        //    request.MetodoCalculoTaxa = 1; //1: Linear  2: Exponencial
        //    request.CodigoClassificacaocontabil = 0; //0 – Ativo, 1- Passivo
        //    request.TipoEmpresa = ""; //Em branco
        //    request.CodigoEmpresa = ""; //Em branco
        //    request.Segmento = "1";


        //    ConsultarTaxaTransferPriceResponse response = client.ConsultarTaxaTransferPrice(request);
        //    Assert.IsTrue(response.TaxasPrimeiraCurva.Count > 0);

        //}
        //#endregion ConsultarTaxaTrasferPriceIrregular

        //#region WS_Teste_ConsultarTaxaTrasferPriceIrregular
        ///// <summary>
        ///// Teste Atraves do WebService
        ///// </summary>
        //[TestMethod]
        //[Description("ConsultarTaxaTrasferPrice - Fluxo Irregular - WEBSERVICE")]
        //public void WS_Teste_ConsultarTaxaTrasferPriceIrregular()
        //{
        //    ////Itau.IM.Carimbador.UnitTest.WSTransferPrice.TransferPriceClient client = new Itau.IM.Carimbador.UnitTest.WSTransferPrice.TransferPriceClient("BasicHttpBinding_ITransferPrice");


        //    //Itau.IM.Carimbador.UnitTest.WSTransferPrice.ConsultarTaxaTransferPriceRequest request =
        //    //    new Itau.IM.Carimbador.UnitTest.WSTransferPrice.ConsultarTaxaTransferPriceRequest();

        //    //request.FlagRecarimbo = 0;
        //    //request.CodigoProdutoFinanceiroDerivado = 099999999;
        //    //request.DataHoraOperacao = new DateTime(2012, 05, 10, 00, 00, 00);
        //    //request.DataReferenciaOperacao = new DateTime(2012, 05, 10);

        //    //request.QuantidadeParamentros = 8;
        //    //List<Itau.IM.Carimbador.UnitTest.WSTransferPrice.ParametroEO> parametros =
        //    //    new List<Itau.IM.Carimbador.UnitTest.WSTransferPrice.ParametroEO>();
        //    //parametros.Add(new Itau.IM.Carimbador.UnitTest.WSTransferPrice.ParametroEO() { Nome = "1", Valor = "0000" });
        //    //parametros.Add(new Itau.IM.Carimbador.UnitTest.WSTransferPrice.ParametroEO() { Nome = "2", Valor = "0790" });
        //    //parametros.Add(new Itau.IM.Carimbador.UnitTest.WSTransferPrice.ParametroEO() { Nome = "3", Valor = "0" });
        //    //parametros.Add(new Itau.IM.Carimbador.UnitTest.WSTransferPrice.ParametroEO() { Nome = "4", Valor = "0" });
        //    //parametros.Add(new Itau.IM.Carimbador.UnitTest.WSTransferPrice.ParametroEO() { Nome = "5", Valor = "00" });
        //    //parametros.Add(new Itau.IM.Carimbador.UnitTest.WSTransferPrice.ParametroEO() { Nome = "6", Valor = "1" });
        //    //parametros.Add(new Itau.IM.Carimbador.UnitTest.WSTransferPrice.ParametroEO() { Nome = "7", Valor = "0" });
        //    //parametros.Add(new Itau.IM.Carimbador.UnitTest.WSTransferPrice.ParametroEO() { Nome = "8", Valor = "0" });
        //    //request.Parametros = parametros.ToArray();

        //    //request.NomeUsuario = "Matheus";
        //    //request.QuantidadeDiasCarencia = 0;

        //    //request.QuantidadeDatasVencimento = 1;
        //    //List<Itau.IM.Carimbador.UnitTest.WSTransferPrice.DataVencimentoEO> vencimentos =
        //    //    new List<Itau.IM.Carimbador.UnitTest.WSTransferPrice.DataVencimentoEO>();
        //    //Itau.IM.Carimbador.UnitTest.WSTransferPrice.DataVencimentoEO dataVenc = new Itau.IM.Carimbador.UnitTest.WSTransferPrice.DataVencimentoEO();
        //    //dataVenc.DataVencimento = "09.12.2012";
        //    //vencimentos.Add(dataVenc);
        //    //request.Vencimentos = vencimentos.ToArray();

        //    //request.ComponentePosTaxaCliente = 0;
        //    //request.ComponentePreTaxaCliente = 0.1d;
        //    //request.CodigoCategoriaPosTaxaCliente = 1;
        //    //request.BaseTIR = 252;
        //    //request.BaseTaxaCliente = 252;
        //    //request.TipoAmortizacao = 3;
        //    //request.ValorPrincipalBruto = 3750;

        //    //request.QuantidadeParcelas = 10;
        //    //List<Itau.IM.Carimbador.UnitTest.WSTransferPrice.FluxoCaixaEO> fluxoCaixa =
        //    //    new List<Itau.IM.Carimbador.UnitTest.WSTransferPrice.FluxoCaixaEO>();

        //    //fluxoCaixa.Add(new Itau.IM.Carimbador.UnitTest.WSTransferPrice.FluxoCaixaEO() { Data = new DateTime(2012, 03, 09), Valor = 0d });
        //    //fluxoCaixa.Add(new Itau.IM.Carimbador.UnitTest.WSTransferPrice.FluxoCaixaEO() { Data = new DateTime(2012, 04, 09), Valor = 0d });
        //    //fluxoCaixa.Add(new Itau.IM.Carimbador.UnitTest.WSTransferPrice.FluxoCaixaEO() { Data = new DateTime(2012, 05, 09), Valor = 0d });
        //    //fluxoCaixa.Add(new Itau.IM.Carimbador.UnitTest.WSTransferPrice.FluxoCaixaEO() { Data = new DateTime(2012, 06, 09), Valor = 0d });
        //    //fluxoCaixa.Add(new Itau.IM.Carimbador.UnitTest.WSTransferPrice.FluxoCaixaEO() { Data = new DateTime(2012, 07, 09), Valor = 0d });
        //    //fluxoCaixa.Add(new Itau.IM.Carimbador.UnitTest.WSTransferPrice.FluxoCaixaEO() { Data = new DateTime(2012, 08, 09), Valor = 0d });
        //    //fluxoCaixa.Add(new Itau.IM.Carimbador.UnitTest.WSTransferPrice.FluxoCaixaEO() { Data = new DateTime(2012, 09, 09), Valor = 0d });
        //    //fluxoCaixa.Add(new Itau.IM.Carimbador.UnitTest.WSTransferPrice.FluxoCaixaEO() { Data = new DateTime(2012, 10, 09), Valor = 0d });
        //    //fluxoCaixa.Add(new Itau.IM.Carimbador.UnitTest.WSTransferPrice.FluxoCaixaEO() { Data = new DateTime(2012, 11, 09), Valor = 0d });
        //    //fluxoCaixa.Add(new Itau.IM.Carimbador.UnitTest.WSTransferPrice.FluxoCaixaEO() { Data = new DateTime(2012, 12, 09), Valor = 100000000d });

        //    //request.FluxoCaixa = fluxoCaixa.ToArray();

        //    //request.MetodoCalculoTaxa = 1;
        //    //request.CodigoClassificacaocontabil = 0;
        //    //request.TipoEmpresa = "";
        //    //request.CodigoEmpresa = "";
        //    //request.Segmento = "1";



        //    Itau.IM.Carimbador.UnitTest.WSTransferPrice.TransferPriceClient client = new Itau.IM.Carimbador.UnitTest.WSTransferPrice.TransferPriceClient("BasicHttpBinding_ITransferPrice");

        //    Itau.IM.Carimbador.UnitTest.WSTransferPrice.ConsultarTaxaTransferPriceRequest request = new Itau.IM.Carimbador.UnitTest.WSTransferPrice.ConsultarTaxaTransferPriceRequest();

        //    request.FlagRecarimbo = 0; //0=quando não for recarimbo, 1=quando for recarimbo
        //    request.CodigoProdutoFinanceiroDerivado = 099999999; //ver com o Watanabe qual é o codigo que devemos considerar
        //    request.DataHoraOperacao = new DateTime(2012, 05, 09, 00, 00, 00);
        //    request.DataReferenciaOperacao = new DateTime(2012, 05, 09);

        //    request.QuantidadeParamentros = 8;
        //    request.Parametros = new Itau.IM.Carimbador.UnitTest.WSTransferPrice.ParametroEO[8];

        //    //INDEXADOR
        //    request.Parametros[0] = new Itau.IM.Carimbador.UnitTest.WSTransferPrice.ParametroEO();
        //    request.Parametros[0].Nome = "1";
        //    request.Parametros[0].Valor = "0000"; //0000=PRE; 0220=DOLAR; %CDI=1211 ...

        //    //MOEDA
        //    request.Parametros[1] = new Itau.IM.Carimbador.UnitTest.WSTransferPrice.ParametroEO();
        //    request.Parametros[1].Nome = "2";
        //    request.Parametros[1].Valor = "0790"; ///0790=REAL; 0220=DOLAR

        //    //TIPO DE FLUXO
        //    request.Parametros[2] = new Itau.IM.Carimbador.UnitTest.WSTransferPrice.ParametroEO();
        //    request.Parametros[2].Nome = "3";
        //    request.Parametros[2].Valor = "1"; //0=BULLET; 1=PMT
        //    //Obs.: Quando for do tipo Bullet, basta ter 1 item na lista de vencimentos , não precisa passar nenhum item na lista de ListaFluxoParcelas.

        //    //CLASSIFICACAO CONTABIL
        //    request.Parametros[3] = new Itau.IM.Carimbador.UnitTest.WSTransferPrice.ParametroEO();
        //    request.Parametros[3].Nome = "4";
        //    request.Parametros[3].Valor = "0"; //0=ATIVO; 1=PASSIVO

        //    //DIRETORIA
        //    request.Parametros[4] = new Itau.IM.Carimbador.UnitTest.WSTransferPrice.ParametroEO();
        //    request.Parametros[4].Nome = "5";
        //    request.Parametros[4].Valor = "00"; //00=NAO IDENTIFICADO; 01-CORP/IBBA; ..., 08=EMPRESAS DOIS ...

        //    //SEGMENTO
        //    request.Parametros[5] = new Itau.IM.Carimbador.UnitTest.WSTransferPrice.ParametroEO();
        //    request.Parametros[5].Nome = "6";
        //    request.Parametros[5].Valor = "0"; //0=NAO SEGMENTADO; 1=ITAU BBA; 2=EMPRESAS DOIS ...

        //    //OPCIONALIDADE DE LIQUIDEZ
        //    request.Parametros[6] = new Itau.IM.Carimbador.UnitTest.WSTransferPrice.ParametroEO();
        //    request.Parametros[6].Nome = "7";
        //    request.Parametros[6].Valor = "0"; //0=SEM LIQUIDEZ; 1=COM LIQUIDEZ

        //    //STATUS DO CONTRATO
        //    request.Parametros[7] = new Itau.IM.Carimbador.UnitTest.WSTransferPrice.ParametroEO();
        //    request.Parametros[7].Nome = "8";
        //    request.Parametros[7].Valor = "0"; //0=EM SER; 1=EM ATRASO

        //    request.NomeUsuario = "HR";
        //    request.QuantidadeDiasCarencia = 0;

        //    request.QuantidadeDatasVencimento = 4;
        //    request.Vencimentos = new Itau.IM.Carimbador.UnitTest.WSTransferPrice.DataVencimentoEO[4];
        //    request.Vencimentos[0] = new Itau.IM.Carimbador.UnitTest.WSTransferPrice.DataVencimentoEO();
        //    request.Vencimentos[0].DataVencimento = "11.06.2012";
        //    request.Vencimentos[1] = new Itau.IM.Carimbador.UnitTest.WSTransferPrice.DataVencimentoEO();
        //    request.Vencimentos[1].DataVencimento = "10.07.2012";
        //    request.Vencimentos[2] = new Itau.IM.Carimbador.UnitTest.WSTransferPrice.DataVencimentoEO();
        //    request.Vencimentos[2].DataVencimento = "07.08.2012";
        //    request.Vencimentos[3] = new Itau.IM.Carimbador.UnitTest.WSTransferPrice.DataVencimentoEO();
        //    request.Vencimentos[3].DataVencimento = "06.09.2012";

        //    request.ComponentePosTaxaCliente = 0; //Estes campos servem para informar o valor da parte pré e da parte pós, caso a operações possua essas características. Ax+B
        //    request.ComponentePreTaxaCliente = 9.8697; //Estes campos servem para informar o valor da parte pré e da parte pós, caso a operações possua essas características. Ax+B
        //    request.CodigoCategoriaPosTaxaCliente = 1; //Informar o código Mercado do Pós da taxa cliente utilizada na operação. È a literal X da formula    A X + B

        //    request.BaseTIR = 252;
        //    //SemConversao = 0,
        //    //FatorAcumulado = 4,
        //    //DiasCorridos30 = 3,
        //    //DiasCorridos360 = 2,
        //    //DiasUteis252 = 1,
        //    //PrecoUnitario = 5,
        //    //Over = 6

        //    request.BaseTaxaCliente = 252;
        //    //SemConversao = 0,
        //    //FatorAcumulado = 4,
        //    //DiasCorridos30 = 3,
        //    //DiasCorridos360 = 2,
        //    //DiasUteis252 = 1,
        //    //PrecoUnitario = 5,
        //    //Over = 6

        //    request.TipoAmortizacao = 0;
        //    //////TipoAmortizacao:   Preenchido somente quando tipo de fluxo = 2 e indexador = PRE
        //    ////// 1: Princ. + enc. Iguais, encargos sobre saldo devedor
        //    ////// 2: Princ. + encargos iguais, encargos sobre parcela
        //    ////// 3: Principal no final e encargos mensais
        //    ////// 4: Principais iguais e encargos sobre saldo devedor
        //    ////// 5: Principais iguais e encargos sobre parcela
        //    ////// 6: Principais diferentes encargos sobre saldo devedor
        //    ////// 7: principais diferentes e encargos sobre parcela

        //    request.ValorPrincipalBruto = 1000;

        //    request.QuantidadeParcelas = 4;
        //    request.FluxoCaixa = new Itau.IM.Carimbador.UnitTest.WSTransferPrice.FluxoCaixaEO[4];
        //    request.FluxoCaixa[0] = new Itau.IM.Carimbador.UnitTest.WSTransferPrice.FluxoCaixaEO();
        //    request.FluxoCaixa[0].Data = new DateTime(2012, 06, 11);
        //    request.FluxoCaixa[0].Valor = 0d;
        //    request.FluxoCaixa[1] = new Itau.IM.Carimbador.UnitTest.WSTransferPrice.FluxoCaixaEO();
        //    request.FluxoCaixa[1].Data = new DateTime(2012, 07, 10);
        //    request.FluxoCaixa[1].Valor = 0d;
        //    request.FluxoCaixa[2] = new Itau.IM.Carimbador.UnitTest.WSTransferPrice.FluxoCaixaEO();
        //    request.FluxoCaixa[2].Data = new DateTime(2012, 08, 07);
        //    request.FluxoCaixa[2].Valor = 0d;
        //    request.FluxoCaixa[3] = new Itau.IM.Carimbador.UnitTest.WSTransferPrice.FluxoCaixaEO();
        //    request.FluxoCaixa[3].Data = new DateTime(2012, 09, 06);
        //    request.FluxoCaixa[3].Valor = 0d;

        //    request.MetodoCalculoTaxa = 2; //1: Linear  2: Exponencial
        //    request.CodigoClassificacaocontabil = 0; //0 – Ativo, 1- Passivo
        //    request.TipoEmpresa = ""; //Em branco
        //    request.CodigoEmpresa = ""; //Em branco
        //    request.Segmento = "0";


        //    Assert.IsTrue(WS_ConsultarTaxaTrasferPriceIrregular(request));

        //}
        //#endregion WS_Teste_ConsultarTaxaTrasferPriceIrregular

        //#region WS_ConsultarTaxaTrasferPriceIrregular
        //public bool WS_ConsultarTaxaTrasferPriceIrregular(Itau.IM.Carimbador.UnitTest.WSTransferPrice.ConsultarTaxaTransferPriceRequest request)
        //{
        //    try
        //    {
        //        Itau.IM.Carimbador.UnitTest.WSTransferPrice.TransferPriceClient client =
        //            new Itau.IM.Carimbador.UnitTest.WSTransferPrice.TransferPriceClient("BasicHttpBinding_ITransferPrice");

        //        Itau.IM.Carimbador.UnitTest.WSTransferPrice.ConsultarTaxaTransferPriceResponse response = client.ConsultarTaxaTransferPrice(request);

        //        //string Chamada = Itau.IM.Common.Mainframe.Book.BookSerializer.Serialize(request);

        //        return (response.TaxasPrimeiraCurva.Length > 0);
        //    }
        //    catch (Exception ex)
        //    {
        //        return false;
        //    }
        //}
        //#endregion WS_ConsultarTaxaTrasferPriceIrregular

        }
        #endregion Métodos de Teste
        
    

    #region Constantes

    public static class Constants
    {
        public const string PARAMETRO_PRODUTO = "Produto";
        public const string PARAMETRO_PRAZO = "Prazo";
        public const string PARAMETRO_MOEDA = "Moeda";
        public const string PARAMETRO_CLASS_CONTABIL = "ClassContabil";
        public const string PARAMETRO_SEGMENTO = "Segmento";
        public const string PARAMETRO_STATUS = "Status";
        public const string PARAMETRO_VOLUME = "Volume";

        public const string PARAMETRO_USUARIO = "COCKPIT";
        public const int PARAMETRO_FLAG_RECARIMBO = 0;
    }





    #endregion Constantes
}